
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.Scanner;

public class SdClientRMI {

    private static String RMI_RegisterIP;
    private static String Remote_Object;
    private static char op = ' ';
    private static double n1 = 0;
    private static double n2 = 0;

    public static void main(String[] args) {

        CalculadoraIntf calc = null;
        double result = 0;

        try {
            Arquivo arq = new Arquivo();
            arq.LeIni("sdclientrmi.ini");

            RMI_RegisterIP = (String) arq.values[0];
            Remote_Object = (String) arq.values[1];

            calc = (CalculadoraIntf) Naming.lookup("rmi://" + RMI_RegisterIP + "/" + Remote_Object);
            System.out.println("Lookup Ok. " + Remote_Object + " encontrado!");

            try {
                System.out.println("Digite os parâmetros separados por [ESPAÇO].");


                while (true) {
                    System.out.println("Digite a conta e em seguida tecla [ENTER] para calcular:");

                    if (LeParametros()) {
                        switch (op) {
                            case '+':
                                result = calc.soma(n1, n2);
                                break;
                            case '-':
                                result = calc.subtrai(n1, n2);
                                break;
                            case '*':
                                result = calc.multiplica(n1, n2);
                                break;
                            case '/':
                                try {
                                    result = calc.divide(n1, n2);
                                    break;
                                } catch (RemoteMsgEx ex) {
                                    System.out.println(ex.getMessage());
                                    result = 0;
                                    break;
                                }
                            default:
                                System.out.println("Operação inválida: '" + op + "'\n");
                                result = 0;
                                break;
                        }

                        System.out.println("Resultado = " + result + "\n");

                        if (verificaFim()) {
                            return;
                        }

                    }
                }
//            } catch (RemoteMsgEx e) {
//                System.out.println("RemoteMsgEx: " + e.getMessage());
            } catch (RemoteException e1) {
                System.out.println("RemoteException: " + e1.getMessage());
            } catch (Exception e2) {
                System.out.println("Exception: " + e2.getMessage());
                e2.printStackTrace();
            }
        } catch (Exception g) {
            System.out.println("Lookup falhou");
            System.out.println("Msg err: " + g.getMessage());
        }
    }

    public static boolean LeParametros() {
        Scanner scan = new Scanner(System.in);

        String linha = scan.nextLine().trim();
        String[] temp = linha.split(" ");
        if (temp.length == 3) {
            try {
                n1 = Double.parseDouble(temp[0].toString());
                n2 = Double.parseDouble(temp[2].toString());
                op = temp[1].charAt(0);

                return true;
            } catch (NumberFormatException ex) {
                System.out.println("número inválido!");
                return false;
            }
        } else {
            System.out.println("parâmetros inválidos!");
            System.out.println("Digite os parâmetros separados por [ESPAÇO].\n");
            return false;
        }
    }

    public static boolean verificaFim() {
        System.out.println("Deseja continuar? (Y/N)");
        Scanner scan = new Scanner(System.in);
        String linha = scan.next().trim();
        System.out.println("");

        return linha.equalsIgnoreCase("N");
    }
}
